/**
 * @param {number} numCourses
 * @param {number[][]} prerequisites
 * @return {number[]}
 */
 var findOrder = function(numCourses, prerequisites) {
    var links=new Array(numCourses).fill(0).map((i) => new Array());
    var visited=new Array(numCourses).fill(0);
    for(let [b,f] of prerequisites){
        //console.log(b,f);
        links[f].push(b);
        visited[b]++;
    }
    let stack=new Array();
    for(let i=0;i<numCourses;i++){
        if(visited[i]==0){
            stack.push(i);
        }
    }
    let count=0;
    let ret=new Array();
    while(stack.length!=0){
        let now=stack.pop();
        ret.push(now);
        count++;
        for(let to of links[now]){
            visited[to]-=1;
            if(visited[to]==0){
                stack.push(to);
            }
        }
    }
    if(count<numCourses){
        return [];
    }
    return ret;
};



// 执行用时：
// 124 ms
// , 在所有 JavaScript 提交中击败了
// 22.26%
// 的用户
// 内存消耗：
// 43.8 MB
// , 在所有 JavaScript 提交中击败了
// 15.29%
// 的用户